package Construibles;

import java.util.ArrayList;
import java.util.Iterator;

import Juego.Jugador;
import RedStuff.ClienteVial;
import RedStuff.ConectorVial;
import RedStuff.FuenteVial;
import RedStuff.RedVial;

public abstract class ZonaFuenteVial extends Zona implements FuenteVial {

	public void conectarConVecinosYDevolverClientes(RedVial red,ArrayList<ClienteVial> clientes) {
		this.conectarConVecinosYDevolverClientes(red, clientes, false);
		
	}
	
	
	protected  boolean sePuedeConectarAvecino(ConectorVial conector){
		return this.sePuedeConectar(conector);
	}

	@Override
	public boolean sePuedeConectar(ConectorVial conector) {
		return conector.sePuedeConectar((FuenteVial)this);
	}






	@Override
	public boolean sePuedeConectar(FuenteVial fuente) {
		return false;
	}






	@Override
	public boolean sePuedeConectar(ClienteVial cliente) {
		return false;
	}
	
	protected abstract int clienteConsumirRecurso(ClienteVial cliente,int recurso);
	
	protected void suministrarAClientesConectados(RedVial red,int recurso){
		if(luz==true){
			ArrayList<ClienteVial> clientes=new ArrayList<ClienteVial>();
			this.conectarConVecinosYDevolverClientes(red, clientes);
			Iterator<ClienteVial> it=clientes.iterator();
			ClienteVial cliente;
			while(it.hasNext() && recurso>0){
				cliente=it.next();
				recurso=clienteConsumirRecurso(cliente,recurso);
			}
			luzTurnoAnterior=true;
			luz=false;
			return;
		}
		luzTurnoAnterior=false;
	}
	
	
	@Override
	public void agregarseARedes(Jugador jugador) {
		super.agregarseARedes(jugador);
		jugador.agregarARedVial((FuenteVial)this);
		
	}
	
	@Override
	public void desconectarseRedes(Jugador jugador) {
		super.desconectarseRedes(jugador);
		jugador.removerDeRedVial((FuenteVial)this);
	}
	
	
}
